
# -*- coding: utf-8 -*-

from django.db import models
from django.contrib.auth.models import User
from django.utils.encoding import force_unicode
from comunidadcyt.departamentos.models import Departamentos
from comunidadcyt.lineasDeInvestigacion.models import LineasDeInvestigacion
from comunidadcyt.middleware import get_request
import unicodedata
import datetime

class GruposDeInvestigacion(models.Model):
    Nombre_grupo = models.CharField(max_length=200, verbose_name="* Nombre", unique=True)
    Descripcion_grupo = models.TextField(blank=True,null=True, verbose_name="Descripción") 
    Responsables = models.ManyToManyField(User, related_name="grupo_que_dirige", verbose_name="Responsables", null=True, blank=True)
    Fecha_creacion = models.DateField(verbose_name="* Fecha de creación")
    Lineas = models.ManyToManyField(LineasDeInvestigacion,related_name="grupos", verbose_name="* Líneas de Investigación")
    Departamento = models.ForeignKey(Departamentos,related_name="grupos", verbose_name="* Departamento")
    Miembros = models.ManyToManyField(User,related_name="grupos", verbose_name="* Miembros")
    CV = models.FileField(max_length=300,upload_to='media/GruposDeInv',blank=True,null=True,editable=False)
    Imagen = models.ImageField(max_length=300,upload_to='media/GruposDeInv',blank=True,null=True,default="static/images/default.png")
    Creador = models.ForeignKey(User,related_name="creador_grupo",blank = True, null = True, editable=False)
    Editor = models.ForeignKey(User,related_name="editor_grupo",blank = True, null = True, editable=False)
     
    def save(self, *args):
        if not self.Creador:
            self.Creador = get_request().user
        self.Editor = get_request().user
        for field in self._meta.fields:
            if field.name == 'Imagen':
                field.upload_to = 'media/GruposDeInv/%s' % unicodedata.normalize('NFKD', self.Nombre_grupo).encode('ascii','ignore').replace(" ", "")
            if field.name == 'CV':
                field.upload_to = 'media/GruposDeInv/%s' % unicodedata.normalize('NFKD', self.Nombre_grupo).encode('ascii','ignore').replace(" ", "")
        super(GruposDeInvestigacion, self).save()

    def esResponsable(self, user):
        if user:
            for u in self.Responsables.all():
                if u.id == user.id:
                    return True
        return False

    class Meta:
        db_table = 'GruposDeInvestigacion' 
        ordering = ['Nombre_grupo']
        verbose_name = "Grupo de Investigacion"

    def __unicode__(self):
        return force_unicode(self.Nombre_grupo)
    
    def get_absolute_url(self):
        return '/comunidadcyt/gruposInvestigacion/ver/%i' % self.id


class SolicitudIngresoGrupo(models.Model):
    Usuario = models.ForeignKey(User, related_name="solicitantegi", verbose_name="Usuario")
    Grupo = models.ForeignKey(GruposDeInvestigacion, related_name="grupoingreso", verbose_name="Grupo")
    Mensaje = models.CharField(max_length=500, blank = True, null = True, verbose_name="Mensaje")

    class Meta:
        db_table = 'SolicitudIngresoGrupo'
        verbose_name = "Ingreso a Grupo"

TIPOS_CHOICES = (
    ('Entrada','Entrada'),
    ('Salida','Salida'),
)

class HistorialGrupo(models.Model):
    Usuario = models.ForeignKey(User, related_name="histogroupuser", verbose_name="Usuario")
    Grupo = models.ForeignKey(GruposDeInvestigacion, related_name="histogroupgroup", verbose_name="Grupo")
    Motivo = models.CharField(max_length=500,default = 'No especificado' ,blank = False, null = False, verbose_name="Motivo")
    Tipo = models.CharField(max_length=10, default = "Entrada",choices=TIPOS_CHOICES)
    Fecha = models.DateField(verbose_name="Fecha")

    class Meta:
        db_table = 'HistorialGrupo'
        verbose_name = "Historial de Grupo"

    def save(self, *args, **kwargs):
        if self.Fecha is None:
            self.Fecha = datetime.datetime.today()
        super(HistorialGrupo, self).save(*args, **kwargs)
